home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / system / sysprof3.zip / MNDLBROT.C < prev    next >
C/C++ Source or Header  |  1989-01-23  |  2KB  |  110 lines

  1. #include "stdio.h"
  2. #include "conio.h"
  3. #include "dos.h"
  4.  
  5. #define sqr(x) (x*x)
  6. #define MAXCOL  319
  7. #define MAXROW  199
  8. #define MAXCOLORS   4
  9.  
  10. int max_iterations = 16;
  11. double max_size = 4.0;
  12.  
  13.                           /*  FUNCTION PROTOTYPES  */
  14.  
  15. void main(int,char *[]);
  16. void mandelbrot(double,double,double,double);
  17. void draw_point(int,int,int);
  18. void set_mode(int);
  19. void print_screen(void);
  20.  
  21. void main ( argc , argv )
  22.  
  23. int argc;
  24. char *argv[];
  25. {
  26. set_mode(0x4);
  27. mandelbrot(2.0,-2.0,2.0,-2.0);
  28. getch();            /*  LET THE USER GET THE PRINTER READY.  */
  29. print_screen();
  30. getch();            /*  DON'T CLEAR THE SCREEN UNTIL HE'S READY.  */
  31.  
  32. }  /*  END OF MAIN  */
  33.  
  34. void mandelbrot ( pmax , pmin , qmax , qmin )
  35.  
  36. double pmax;
  37. double pmin;
  38. double qmax;
  39. double qmin;
  40. {
  41. int color , row , col;
  42. double p , q , modulus , deltaq , deltap;
  43. double xcur , xlast , ycur , ylast;
  44.  
  45. deltap = (pmax-pmin)/(MAXCOL-1);
  46. deltaq = (qmax-qmin)/(MAXROW-1);
  47.  
  48. for (col = 0; col <= MAXCOL; col++)
  49.     for (row = 0; row <= MAXROW; row++)
  50.         {
  51.         p = pmin+col*deltap;
  52.         q = qmin+row*deltaq;
  53.  
  54.         xlast = ylast = modulus = 0.0;
  55.         color = 0;
  56.         while ((modulus < max_size) && (color < max_iterations))
  57.             {
  58.             xcur = sqr(xlast) - sqr(ylast) + p;
  59.             ycur = 2*xlast*ylast+q;
  60.             color++;
  61.             xlast = xcur;
  62.             ylast = ycur;
  63.             modulus = sqr(xcur)+sqr(ycur);
  64.             }
  65.         draw_point(col,row,color%MAXCOLORS);
  66.         }
  67.  
  68. return;
  69. }  /*  END OF MANDELBROT  */
  70.  
  71. void draw_point( col , row , color)
  72.  
  73. int col;
  74. int row;
  75. int color;
  76. {
  77. union REGS registers;
  78.  
  79. registers.x.dx = row;
  80. registers.x.cx = col;
  81. registers.h.al = (unsigned char)color;
  82. registers.h.ah = 0x0C;
  83.  
  84. int86(0x10,®isters,®isters);
  85. return;
  86. }
  87.  
  88. void set_mode ( mode )
  89.  
  90. int mode;
  91. {
  92. union REGS registers;
  93.  
  94. registers.h.ah = 0;
  95. registers.h.al = (unsigned char)mode;
  96.  
  97. int86(0x10,®isters,®isters);
  98. return;
  99. }
  100.  
  101. void print_screen ( )
  102. {
  103. union REGS registers;
  104.  
  105. int86(0x05,®isters,®isters);
  106. return;
  107. }
  108.  
  109.  
  110.